frontend/pages/e/[uuid]/index.tsx (view raw)
1import {useState, PropsWithChildren} from 'react';
2import Box from '@mui/material/Box';
3import TravelColumns from '../../../containers/TravelColumns';
4import NewTravelDialog from '../../../containers/NewTravelDialog';
5import pageUtils from '../../../lib/pageUtils';
6import EventLayout, {TabComponent} from '../../../layouts/Event';
7import {EventByUuidDocument} from '../../../generated/graphql';
8import {getLocaleForLang} from '../../../lib/getLocale';
9
10interface Props {
11 eventUUID: string;
12 announcement?: string;
13}
14
15const Page = (props: PropsWithChildren<Props>) => {
16 return <EventLayout {...props} Tab={TravelsTab} />;
17};
18
19const TravelsTab: TabComponent<Props> = () => {
20 const [openNewTravelDialog, setNewTravelDialog] = useState(false);
21
22 return (
23 <Box>
24 <TravelColumns showTravelModal={() => setNewTravelDialog(true)} />
25 <NewTravelDialog
26 opened={openNewTravelDialog}
27 toggle={() => setNewTravelDialog(false)}
28 />
29 </Box>
30 );
31};
32
33export const getServerSideProps = pageUtils.getServerSideProps(
34 async (context, apolloClient) => {
35 const {uuid} = context.query;
36 const {host = ''} = context.req.headers;
37 let event = null;
38
39 // Fetch event
40 try {
41 const {data} = await apolloClient.query({
42 query: EventByUuidDocument,
43 variables: {uuid},
44 });
45 event = data?.eventByUUID?.data;
46 } catch (error) {
47 return {
48 notFound: true,
49 };
50 }
51
52 const description = await getLocaleForLang(
53 event?.attributes?.lang,
54 'meta.description'
55 );
56
57 return {
58 props: {
59 eventUUID: uuid,
60 metas: {
61 title: event?.attributes?.name || '',
62 description,
63 url: `https://${host}${context.resolvedUrl}`,
64 },
65 },
66 };
67 }
68);
69
70export default Page;